package com.ljf.authority.service;

import com.ljf.authority.dto.command.*;
import com.ljf.authority.dto.query.AuthorityBaseMenuTabulationQuery;
import com.ljf.authority.vo.*;
import com.ljf.common.exception.ServiceException;
import com.ljf.common.result.ServiceResultModel;
import com.ljf.common.service.IBasisService;

/**
 * 菜单列表定义  服务接口定义
 * 
 * @author LJF
 * @since 2024-10-17
 */
public interface IAuthorityBaseMenuTabulationService extends IBasisService<AuthorityBaseMenuTabulationQuery, AuthorityBaseMenuTabulationVO, AuthorityBaseMenuTabulationCommand> {

    /**
     * 权限树
     *
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<AuthorityBaseMenuTabulationMainMenuVO> tree() throws ServiceException;

    /**
     * 权限按钮
     *
     * @param componentUrl
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<AuthorityBaseMenuTabulationButtonMethodVO> button(String componentUrl) throws ServiceException;

    /**
     * 菜单树
     *
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<AuthorityBaseMenuTabulationMainMenuVO> queryMenuTree() throws ServiceException;

    /**
     * 根据ID查询菜单树排序
     *
     * @param id
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<AuthorityBaseMenuTabulationVO> querySortById(Long id) throws ServiceException;

    /**
     * 修改菜单列表排序
     *
     * @param command
     * @return
     * @throws ServiceException
     */
    ServiceResultModel editSort(AuthorityBaseMenuTabulationSortCommand command) throws ServiceException;

    /**
     * 根据ID查询菜单树明细
     *
     * @param id
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<AuthorityBaseMenuTabulationDetailVO> queryDetailById(Long id) throws ServiceException;

    /**
     * 修改菜单列表明细
     *
     * @param command
     * @return
     * @throws ServiceException
     */
    ServiceResultModel editDetail(AuthorityBaseMenuTabulationDetailCommand command) throws ServiceException;

    /**
     * 根据ID查询菜单关联后端
     *
     * @param id
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<AuthorityBaseMenuTabulationBackendVO> queryBackendById(Long id) throws ServiceException;

    /**
     * 修改菜单列表关联后端
     *
     * @param command
     * @return
     * @throws ServiceException
     */
    ServiceResultModel editBackend(AuthorityBaseMenuTabulationBackendCommand command) throws ServiceException;

    /**
     * 根据ID查询菜单按钮方法
     *
     * @param id
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<AuthorityBaseMenuTabulationMethodVO> queryMethodById(Long id) throws ServiceException;

    /**
     * 修改菜单列表按钮方法
     *
     * @param command
     * @return
     * @throws ServiceException
     */
    ServiceResultModel editMethod(AuthorityBaseMenuTabulationMethodCommand command) throws ServiceException;

    /**
     * 修改菜单列表激活状态
     *
     * @param command
     * @return
     * @throws ServiceException
     */
    ServiceResultModel editActivation(AuthorityBaseMenuTabulationActivationCommand command) throws ServiceException;

    /**
     * 修改菜单列表关联权限组
     *
     * @param command
     * @return
     * @throws ServiceException
     */
    ServiceResultModel editPermissionGroup(AuthorityBaseMenuTabulationPermissionGroupCommand command) throws ServiceException;

    /**
     * 根据ID查询菜单权限组
     *
     * @param id
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<AuthorityBaseMenuTabulationPermissionGroupVO> queryPermissionGroupById(Long id) throws ServiceException;

}
